/*!
 @Name：layer mobile v2.0 弹层组件移动版
 @Author：贤心
 @Site：http://layer.layui.com/mobie/
 @License：LGPL
    
 */

;
! function(win) {

	"use strict";

	var doc = document,
		query = 'querySelectorAll',
		claname = 'getElementsByClassName',
		S = function(s) {
			return doc[query](s);
		};

	//默认配置
	var config = {
		type: 0,
		shade: true,
		shadeClose: true,
		fixed: true,
		anim: 'scale' //默认动画类型
	};

	var ready = {
		extend: function(obj) {
			var newobj = JSON.parse(JSON.stringify(config));
			for(var i in obj) {
				newobj[i] = obj[i];
			}
			return newobj;
		},
		timer: {},
		end: {}
	};

	//点触事件
	ready.touch = function(elem, fn) {
		elem.addEventListener('click', function(e) {
			fn.call(this, e);
		}, false);
	};

	var index = 0,
		classs = ['layui-m-layer'],
		Layer = function(options) {
			var that = this;
			that.config = ready.extend(options);
			that.view();
		};

	Layer.prototype.view = function() {
		var that = this,
			config = that.config,
			layerbox = doc.createElement('div');

		that.id = layerbox.id = classs[0] + index;
		layerbox.setAttribute('class', classs[0] + ' ' + classs[0] + (config.type || 0));
		layerbox.setAttribute('index', index);

		//标题区域
		var title = (function() {
			var titype = typeof config.title === 'object';
			return config.title ?
				'<h3 style="' + (titype ? config.title[1] : '') + '">' + (titype ? config.title[0] : config.title) + '</h3>' :
				'';
		}());
		
		//标题关闭按钮
		var closebtn = (function() {
			return config.closebtn === true ? '<b no type="0" class="closebtn"></b><div class="layui-m-bar"></div>': '';
		}());

		//按钮区域
		var button = (function() {
			typeof config.btn === 'string' && (config.btn = [config.btn]);
			var btns = (config.btn || []).length,
				btndom;
			if(btns === 0 || !config.btn) {
				return '';
			}
			btndom = '<span yes type="1">' + config.btn[0] + '</span>'
			if(btns === 2) {
				btndom = '<span no type="0">' + config.btn[1] + '</span>' + btndom;
			}
			return '<div class="layui-m-layerbtn">' + btndom + '</div>';
		}());

		if(!config.fixed) {
			config.top = config.hasOwnProperty('top') ? config.top : 100;
			config.style = config.style || '';
			config.style += ' top:' + (doc.body.scrollTop + config.top) + 'px';
		}

		if(config.type === 2) {
			config.content = '<i></i><i class="layui-m-layerload"></i><i></i><p>' + (config.content || '') + '</p>';
		}

		if(config.skin) config.anim = 'up';
		if(config.skin === 'msg') config.shade = false;

		layerbox.innerHTML = (config.shade ? '<div ' + (typeof config.shade === 'string' ? 'style="' + config.shade + '"' : '') + ' class="layui-m-layershade"></div>' : '') +
			'<div class="layui-m-layermain" ' + (!config.fixed ? 'style="position:static;"' : '') + '>' +
			'<div class="layui-m-layersection">' +
			'<div class="layui-m-layerchild ' + (config.skin ? 'layui-m-layer-' + config.skin + ' ' : '') + (config.className ? config.className : '') + ' ' + (config.anim ? 'layui-m-anim-' + config.anim : '') + '" ' + (config.style ? 'style="' + config.style + '"' : '') + '>' +
			title + closebtn +
			'<div class="layui-m-layercont">' + config.content + '</div>' +
			button +
			'</div>' +
			'</div>' +
			'</div>';

		if(!config.type || config.type === 2) {
			var dialogs = doc[claname](classs[0] + config.type),
				dialen = dialogs.length;
			if(dialen >= 1) {
				layer.close(dialogs[0].getAttribute('index'))
			}
		}

		document.body.appendChild(layerbox);
		var elem = that.elem = S('#' + that.id)[0];
		config.success && config.success(elem);

		that.index = index++;
		that.action(config, elem);
	};

	Layer.prototype.action = function(config, elem) {
		var that = this;

		//自动关闭
		if(config.time) {
			ready.timer[that.index] = setTimeout(function() {
				layer.close(that.index);
			}, config.time * 1000);
		}
		
		

		//确认取消
		var btn = function() {
			var type = this.getAttribute('type');
			if(type == 0) {
				config.no && config.no();
				layer.close(that.index);
			} else {
				config.yes ? config.yes(that.index) : layer.close(that.index);
			}
		};
		if(config.btn) {
			var btns = elem[claname]('layui-m-layerbtn')[0].children,
				btnlen = btns.length;
			for(var ii = 0; ii < btnlen; ii++) {
				ready.touch(btns[ii], btn);
			}
		}
		
		if(config.closebtn){
			var closebtnele = elem[claname]('closebtn')[0];
			ready.touch(closebtnele, btn);
		}

		//点遮罩关闭
		if(config.shade && config.shadeClose) {
			var shade = elem[claname]('layui-m-layershade')[0];
			ready.touch(shade, function() {
				layer.close(that.index, config.end);
			});
		}

		config.end && (ready.end[that.index] = config.end);
	};

	win.layer = {
		v: '2.0',
		index: index,

		//核心方法
		open: function(options) {
			var o = new Layer(options || {});
			return o.index;
		},

		close: function(index) {
			var ibox = S('#' + classs[0] + index)[0];
			if(!ibox) return;
			ibox.innerHTML = '';
			doc.body.removeChild(ibox);
			clearTimeout(ready.timer[index]);
			delete ready.timer[index];
			typeof ready.end[index] === 'function' && ready.end[index]();
			delete ready.end[index];
		},

		//关闭所有layer层
		closeAll: function() {
			var boxs = doc[claname](classs[0]);
			for(var i = 0, len = boxs.length; i < len; i++) {
				layer.close((boxs[0].getAttribute('index') | 0));
			}
		}
	};

	'function' == typeof define ? define(function() {
		return layer;
	}) : function() {

		var js = document.scripts,
			script = js[js.length - 1],
			jsPath = script.src;
		var path = jsPath.substring(0, jsPath.lastIndexOf("/") + 1);

		//如果合并方式，则需要单独引入layer.css
		if(script.getAttribute('merge')) return;

		document.head.appendChild(function() {
			var link = doc.createElement('link');
			link.href = path + 'need/layer.css?2.0';
			link.type = 'text/css';
			link.rel = 'styleSheet'
			link.id = 'layermcss';
			return link;
		}());

	}();

}(window);